package model;

/**
 * Deze klasse beschrijft een gebruiker.
 * @author Yasper
 * @author Nick 
 * @author Dennis
 * @author Jaap
 * @version 1.0
 *
 */
public class Gebruiker extends Persoon {
	private double reputatie;
	private int repHoeveelheid;
	private int aantalStemmen;
	private boolean blokkeer;
	
	/**
	 * @param gebruikersNaam Inlognaam van gebruiker
	 * @param wachtwoord Wachtwoord van gebruiker
	 * @param repPunten Aantal reputatie punten
	 * @param repAantal Aantal keren dat reputatie is gegeven op gebruiker
	 */
	public Gebruiker(String gebruikersNaam, int wachtwoord, int repPunten, int repAantal){
		super(gebruikersNaam, wachtwoord);

		this.repHoeveelheid = repPunten;
		this.aantalStemmen = repAantal;
		this.reputatie = 0.0;
	}
	
	/**
	 * Berekent reputatie.
	 * @author Jaap
	 */
	public void berekenReputatie() {
		double getal = repHoeveelheid/aantalStemmen;
		reputatie = Math.round((getal * 10)) / 10.0;
	}

	//Getters
	
	/**
	 * geeft reputatie
	 * @author Jaap
	 * @author Dennis
	 * @return double m_reputatie
	 */
	public double getReputatie() {
		if(aantalStemmen > 0){
			return Math.round(((repHoeveelheid * 1.0) / aantalStemmen)*10)/10.0;
		}else{
			return 0.0;
		}
		
	}
	
	/**
	 * geeft rephoeveelheid
	 * @author Jaap
	 * @author Dennis
	 * @return int m_repHoeveelheid
	 */
	public int getRepHoeveelheid() {
		return repHoeveelheid;
	}

	/**
	 * geeft aantalStemmen
	 * @author Jaap
	 * @author Dennis
	 * @return int m_aantalStemmen
	 */
	public int getAantalStemmen() {
		return aantalStemmen;
	}
	
	
	/**
	 * geeft boolean of gebruiker is geblokeerd is of niet.
	 * @author Jaap
	 * @author Dennis
	 * @return boolean m_blokkeer
	 */
	public boolean getBlokkeer() {
		return blokkeer;
	}
	
	//Setters
	
	/**
	 * Verandert reputatie in de meegeleverde reputatie
	 * @author Jaap
	 * @author Dennis
	 * @param mReputatie Bij de reputatie word het aantal punten bij opgeteld.
	 */
	public void setReputatie(int mReputatie) {
		setRepHoeveelheid(mReputatie);
		setAantalStemmen(getAantalStemmen() + 1);
	}

	/**
	 * Verandert rephoeveelheid in de meegeleverde repPunten
	 * @author Jaap
	 * @author Dennis
	 * @param RepHoeveelheid RepHoeveelheid word opgeteld bij het totaal aantal punten van de gebruiker.
	 */
	public void setRepHoeveelheid(double repPunten) {
		repHoeveelheid += repPunten;
	}

	/**
	 * Verandert aantalStemmen in de meegegeven repStemmen
	 * @author Jaap
	 * @author Dennis
	 * @param AantalStemmen AantalStemmen = altijd 1 per keer dat word opgeteld bij het totaal aantal stemmen.
	 */
	public void setAantalStemmen(int repStemmen) {
		aantalStemmen += repStemmen;
	}
	
	/**
	 * Verandert boolean blokkeer in de meegeleverde boolean
	 * @author Jaap
	 * @author Dennis
	 * @param geblokkeerd
	 */
	public void setBlokkeren(boolean geblokkeerd) {
		this.blokkeer = geblokkeerd;
	}
}
